<?php
/*
 * 在线升级
 */
 
namespace app\admin\controller;
use think\Db;
use shu\HttpDownload;
use shu\Zip;

class Update extends Comm
{
	public function devlog(){
		$log=Db::name('devlog')->order('id desc')->paginate(10);
		 $this->assign('log', $log);
		 return $this->fetch();
	}
	public function update(){
		$this->assign('nav', array('setting', 'update', ''));//导航
        return $this->fetch();
	}
	
    public function updating()
    {

        set_time_limit(0);
        $file = isset($_GET['file']) ? $_GET['file'] : false;
        if ($file) {

            //升级包下载
            $url = config('UPDATE_FILE') . $file;
            $file = new HttpDownload(); //实例化类
            $file->OpenUrl($url); //远程文件地址
			//print_r($file);die;
            $result = $file->SaveToBin("update.zip"); # 保存路径及文件名
            $file->Close();
            if (!$result) {
                addlog('升级包下载失败。');
				$this->error('抱歉，升级文件下载失败，请稍后再试或前往官方下载升级包手动升级！');
            }
            $archive = new Zip();
            $result = $archive->unzip('update.zip', './');
            if ($result == -1) {
				$this->error('抱歉，升级包解压失败，请手动解压并导入update.sql升级数据库！');
            }
            //数据库升级
            $sql = true;
            if (file_exists('update.sql')) {
                $sql = file_get_contents('update.sql');
                $prefix = config('DB_PREFIX');
                $sql = str_replace('qw_', $prefix, $sql);
                if (!db()->execute($sql)) {
                    $sql = false;
                }
            }
            if (!$sql) {
                addlog('数据库升级失败。');
				$this->success('数据库升级失败！请手动导入update.sql文件执行数据库升级！');
            }

            //删除升级包
            @unlink('update.zip');

            if (file_exists('update.sql')) {
                @unlink('update.sql');
            }
            if (file_exists('update.zip')) {
                addlog('升级成功。');
				$this->success('恭喜！升级成功！请手动删除update.zip和update.sql（若存在）');
            }
            addlog('升级成功。');
			$this->success('恭喜！升级成功！');
        } else {
            $this->error('参数错误！');  //参数错误
        }
    }
	
	
	
}
?>